package com.siyuanren.gcocp.dto;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.siyuanren.gcocp.entity.WxActive;
import com.siyuanren.gcocp.entity.WxCourse;
import com.siyuanren.gcocp.entity.WxUser;
import lombok.Getter;
import lombok.Setter;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by   anxing
 * Project_name gcocp-parent
 * Path         com.siyuanren.gcocp.dto
 * Date         2018/6/20
 * Time         15:36
 * Description 模板消息基本dto
 */
@Getter
@Setter
public class MsgBaseDTO {
    private String toUserOpenId;
    private String templateId;
    private String url;
    private List<WxMpTemplateData> params;

    MsgBaseDTO() {
        params = new ArrayList<>();
    }


    /**
     * 1、报名成功通知：（缴费成功后，收到此通知）
     JMMf0739tE94UPkN5PdI0zJEuyxl3JahjSKPhThgvcg
     {{first.DATA}}
     购买课程：{{keyword1.DATA}}
     报道时间：{{keyword2.DATA}}
     {{remark.DATA}}
     * @return
     */
    public static MsgBaseDTO getPaySuccessMsg(String toUser, String courseName, String enterGroupDate) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(toUser);
        dto.setTemplateId("JMMf0739tE94UPkN5PdI0zJEuyxl3JahjSKPhThgvcg");
        dto.getParams().add(new WxMpTemplateData("first", "你已成功报名"));
        dto.getParams().add(new WxMpTemplateData("keyword1", courseName));
        dto.getParams().add(new WxMpTemplateData("keyword2", enterGroupDate));
        dto.getParams().add(new WxMpTemplateData("remark", "请耐心等待"));
        return dto;
    }

    /**
     * 开课入群通知
     * @param toUser
     * @return
     * {{first.DATA}}
    课程标题：{{keyword1.DATA}}
    课程内容：{{keyword2.DATA}}
    主讲老师：{{keyword3.DATA}}
    时间：{{keyword4.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getEnterGroupMsg(String toUser, WxCourseDTO course) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(toUser);
        dto.setTemplateId("HQb6e4t9iaM_YHlrNMSsfnXfWwZkJdvdGN04lSjsJcw");
        dto.getParams().add(new WxMpTemplateData("first", "您好！您订购买的" +course.getCourseName() + "已开放报到"));
        dto.getParams().add(new WxMpTemplateData("keyword1", course.getCourseName()));
        dto.getParams().add(new WxMpTemplateData("keyword2", course.getCourseDesc()));
        dto.getParams().add(new WxMpTemplateData("keyword3", course.getTeacherName()));
        dto.getParams().add(new WxMpTemplateData("keyword4", DateUtil.formatDate(course.getStartTime())));
        dto.getParams().add(new WxMpTemplateData("remark", "报到将于今晚12点截止，报到成功才能跟随班主任引领学习，请尽快报到！\n" +
                "如放弃报到，视为自动放弃引领。"));
        return dto;
    }

    /**
     * 上课提醒（课程每天早上7：00提醒）
     * @param toUser
     * @return
     * {{first.DATA}}
    课程标题：{{keyword1.DATA}}
    课程内容：{{keyword2.DATA}}
    主讲老师：{{keyword3.DATA}}
    时间：{{keyword4.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getStudyRemindMsg(String toUser, WxCourseDTO course) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(toUser);
        dto.setTemplateId("HQb6e4t9iaM_YHlrNMSsfnXfWwZkJdvdGN04lSjsJcw");
        dto.getParams().add(new WxMpTemplateData("first", "你订阅的课程今天内容已更新，请及时完成"));
        dto.getParams().add(new WxMpTemplateData("keyword1", course.getCourseName()));
        dto.getParams().add(new WxMpTemplateData("keyword2", course.getCourseDesc()));
        dto.getParams().add(new WxMpTemplateData("keyword3", course.getTeacherName()));
        dto.getParams().add(new WxMpTemplateData("keyword4", DateUtil.formatDate(course.getStartTime())));
        dto.getParams().add(new WxMpTemplateData("remark", "点击【开始学习】进入系统学习"));
        return dto;
    }
    /**
     * 上课提醒（当天未按时学习同学，晚上7点推送提醒）
     * @param toUser
     * @return
     * {{first.DATA}}
    课程标题：{{keyword1.DATA}}
    课程内容：{{keyword2.DATA}}
    主讲老师：{{keyword3.DATA}}
    时间：{{keyword4.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getStudyRemind2Msg(String toUser, WxCourseDTO course) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(toUser);
        dto.setTemplateId("HQb6e4t9iaM_YHlrNMSsfnXfWwZkJdvdGN04lSjsJcw");
        dto.getParams().add(new WxMpTemplateData("first", "你今天订阅的学习任务还没有完成，请及时完成哦"));
        dto.getParams().add(new WxMpTemplateData("keyword1", course.getCourseName()));
        dto.getParams().add(new WxMpTemplateData("keyword2", course.getCourseDesc()));
        dto.getParams().add(new WxMpTemplateData("keyword3", course.getTeacherName()));
        dto.getParams().add(new WxMpTemplateData("keyword4", DateUtil.formatDate(course.getStartTime())));
        dto.getParams().add(new WxMpTemplateData("remark", "点击【开始学习】进入系统学习"));
        return dto;
    }

    /**
     * 毕业典礼（课程学习结束第二天）
     * @param
     * @return
     * {{first.DATA}}
    课程名称：{{keyword1.DATA}}
    毕业时间：{{keyword2.DATA}}
    学员姓名：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getGradMsg(WxUser user, WxCourseDTO course) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("ksGwnIS1OP9xFF9du-Zx68_ewY1bKllp8EqwgU_Y7u8");
        dto.getParams().add(new WxMpTemplateData("first", "助教Riva提醒你\\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", course.getCourseName()));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.formatDate(course.getGradTime())));
        dto.getParams().add(new WxMpTemplateData("keyword3", user.getNickname()));
        dto.getParams().add(new WxMpTemplateData("remark", "今天是【"+ course.getCourseName() + "】的毕业典礼以开放。\n" +
                "请及时进入系统打印毕业证书。\n"));
        return dto;
    }

    /**
     *  领取毕业福利（送毕业福利时间：毕业典礼当天下午7：00）
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getGradVoucherMsg(WxUser user, WxCourseDTO course) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "你好 " + user.getNickname()));
        dto.getParams().add(new WxMpTemplateData("keyword1", "毕业福利已发送"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "送毕业福利"));
        dto.getParams().add(new WxMpTemplateData("remark", "你的【毕业福利】已发送，\n" +
                "可以发送该优惠券给好友优惠报名\n"));
        return dto;
    }

    /**
     *  好友领取优惠券通知（好友扫码领取即可收到通知）
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getFriendReceiveVoucherMsg(WxUser user, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "你好 " + user.getNickname()));
        dto.getParams().add(new WxMpTemplateData("keyword1", "好友领取优惠券通知"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "已领取"));
        dto.getParams().add(new WxMpTemplateData("remark", "你的好友【" + friendName + "】已成功领取你赠送的课程优惠券"));
        return dto;
    }

    /**
     *  好友优惠券使用通知（好友领取优惠券并报名后通知）
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getFriendUseVoucherMsg(WxUser user, WxCourseDTO course, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "你好 " + user.getNickname()));
        dto.getParams().add(new WxMpTemplateData("keyword1", "好友使用优惠券通知"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "已使用"));
        dto.getParams().add(new WxMpTemplateData("remark", "你的好友【" + friendName + "】已经使用你的邀请卡报名【"+course.getCourseName() + "】"));
        return dto;
    }
    /**
     *  10、活动提醒（首次活动发布，在学员学习的第二天下午7：00，未执行任务学员，在接下去的第三天、第四天、第五天都会收到任务提醒，直到执行了任务为止）
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveRemindMsg(WxUser user, WxCourseDTO course, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "助教Riva提醒你，\n" +
                "你有一份【"+course.getCourseName() + "】待领取\n" +
                "数量有限，领完即止\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", "活动提醒"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "【"+course.getCourseName() + "】待领取"));
        dto.getParams().add(new WxMpTemplateData("remark", "点击领取"));
        return dto;
    }
    /**
     *  10、活动提醒 最后一天
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveLastdayRemindMsg(WxUser user, WxActive active, WxCourseDTO course, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "助教Riva提醒你，\n" +
                "你有一份【"+course.getCourseName() + "】待领取\n" +
                "仅剩一天! 错过就没有机会获得啦\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", "活动提醒"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "截止至" + DateUtil.format(active.getActiveEndDate(), "yyyy年MM月dd日 HH:mm")));
        dto.getParams().add(new WxMpTemplateData("remark", "点击领取"));
        return dto;
    }
    /**
     *  10、活动提醒 最后4小时
     * @return
     *
     * {{first.DATA}}
    通知名称：{{keyword1.DATA}}
    通知编号：{{keyword2.DATA}}
    通知摘要：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveLast4HourRemindMsg(WxUser user, WxActive active, WxCourseDTO course, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("oOqNk4PLs3s0wdjI4MKVKOdYeObKSt9Rm9ckraD2teM");
        dto.getParams().add(new WxMpTemplateData("first", "助教Riva提醒你，\n" +
                "你有一份【"+course.getCourseName() + "】待领取\n" +
                "距离活动截止还剩4小时! 错过就没有机会获得啦\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", "活动提醒"));
        dto.getParams().add(new WxMpTemplateData("keyword2", DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)));
        dto.getParams().add(new WxMpTemplateData("keyword3", "截止至" + DateUtil.format(active.getActiveEndDate(), "yyyy年MM月dd日 HH:mm")));
        dto.getParams().add(new WxMpTemplateData("remark", "点击领取"));
        return dto;
    }


    /**
     *  13、活动开始通知（活动完成后，收到礼物等待领取通知）
     * @return
     *
     *
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveStartMsg(WxUser user, WxActive active, WxCourse sponsorCourse, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0");
        dto.getParams().add(new WxMpTemplateData("first", "你已经申领了【"+sponsorCourse.getCourseName()+"】，完成课程赠送好友任务即可获得【"+sponsorCourse.getCourseName()+"】\n" +
                "请将活动主页优惠券保存后发送给好友\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", sponsorCourse.getCourseName()+"审领"));
        dto.getParams().add(new WxMpTemplateData("keyword2", "申领报名通知"));
        dto.getParams().add(new WxMpTemplateData("remark", "详情"));
        return dto;
    }

    /**
     *  13、活动进度通知（活动完成后，收到礼物等待领取通知）
     * @return
     *
     *
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveProgressMsg(WxUser user, WxActive active, WxCourse sponsorCourse, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0");
        dto.getParams().add(new WxMpTemplateData("first", "你已经申领了【"+sponsorCourse.getCourseName()+"】，完成课程赠送好友任务即可获得【"+sponsorCourse.getCourseName()+"】\n" +
                "请将活动主页优惠券保存后发送给好友\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", sponsorCourse.getCourseName()+"审领"));
        dto.getParams().add(new WxMpTemplateData("keyword2", "申领报名通知"));
        dto.getParams().add(new WxMpTemplateData("remark", "详情"));
        return dto;
    }
    /**
     *  13、活动完成通知，收到礼物等待领取通知
     * @return
     *
     *
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static MsgBaseDTO getActiveCompleteMsg(WxUser user, WxActive active, WxCourse sponsorCourse, String friendName) {
        MsgBaseDTO dto = new MsgBaseDTO();
        dto.setToUserOpenId(user.getOpenid());
        dto.setTemplateId("EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0");
        dto.getParams().add(new WxMpTemplateData("first", "你已经完成邀请，可以免费领取【"+sponsorCourse.getCourseName()+"】\n" +
                "活动结束后，课程统一赠送\n"));
        dto.getParams().add(new WxMpTemplateData("keyword1", sponsorCourse.getCourseName()+"审领"));
        dto.getParams().add(new WxMpTemplateData("keyword2", "礼物领取通知"));
        dto.getParams().add(new WxMpTemplateData("remark", "详情"));
        return dto;
    }

}
